package com.srmt.document.feishu.internal.table;

import com.lark.oapi.service.docx.v1.model.Block;
import com.lark.oapi.service.docx.v1.model.UpdateBlockRequest;
import com.srmt.document.exception.TableException;
import com.srmt.document.feishu.internal.table.model.TableContext;
import com.srmt.document.model.ColumnData;
import com.srmt.document.model.RowData;

import java.util.List;
import java.util.Map;

/**
 * 表格写入策略接口
 * 
 * 定义表格内容写入相关的操作，包括单元格更新、批量更新等。
 * 
 * @author srmt
 * @since 5.0.0
 */
public interface TableWriteStrategy extends TableStrategy {
    
    /**
     * 创建表格结构
     * 
     * @param rows 行数
     * @param cols 列数
     * @param content 表格内容（可选）
     * @return Block数组，包含表格Block和所有子Block
     * @throws TableException 如果创建失败
     */
    Block[] createTableStructure(int rows, int cols, List<List<String>> content) throws TableException;
    
    /**
     * 更新单元格内容（基于行列索引）
     * 
     * @param context 表格上下文
     * @param row 行索引（从1开始）
     * @param col 列索引（从1开始）
     * @param value 新的单元格内容
     * @throws TableException 如果更新失败
     */
    void updateCellContentByIndex(TableContext context, int row, int col, String value) throws TableException;
    /**
     * 批量更新单元格内容（基于行列索引）
     * 
     * @param context 表格上下文
     * @param cellUpdates 单元格更新映射 ([row, col] -> value)
     * @throws TableException 如果更新失败
     */
    void batchUpdateCellsByIndex(TableContext context, Map<int[], String> cellUpdates) throws TableException;
    
    /**
     * 添加表格行
     * 
     * @param context 表格上下文
     * @param rows 要添加的行数据
     * @param position 插入位置（-1表示末尾）
     * @throws TableException 如果添加失败
     */
    void addTableRows(TableContext context, List<RowData> rows, int position) throws TableException;
    
    /**
     * 添加表格列
     * 
     * @param context 表格上下文
     * @param columns 要添加的列数据
     * @param position 插入位置（-1表示末尾）
     * @throws TableException 如果添加失败
     */
    void addTableColumns(TableContext context, List<ColumnData> columns, int position) throws TableException;
}